<?php

/**
 * Controlador de la parte de documentos.
 * Los parametros se le han de pasar por GET
 *
 * @author Israel Mora e Ismael Garcia
 */

include_once (realpath(dirname(__FILE__)) . '/../modelos/doc.class.php');
include_once (realpath(dirname(__FILE__)) . '/../modelos/asign.class.php');
include_once (realpath(dirname(__FILE__)) . '/../modelos/rols.class.php');

$control = new control_doc();

class control_doc {

    private $_action;
    private $_doc;
    private $_capa;
    private $_rols;

    public function __construct($capa = 'principal') {
        $this->_capa = $capa;
        $this->_action = isset($_GET["action"]) ? $_GET["action"] : 'list';
        $this->_doc = new Doc();
        $this->_rols = new Rols();

        switch ($this->_action) {
            case 'list' : $this->listDoc();
                break;
            case 'show' : $this->showDoc();
                break;
            case 'edit' : $this->editDoc();
                break;
            case 'new' : $this->newDoc();
                break;
            case 'insert' : $this->insertDoc();
                break;
            case 'update' : $this->updateDoc();
                break;
            case 'delete' : $this->deleteDoc();
                break;
            case 'download': $this->downloadDoc();
                break;
            case 'check': $this->check();
                break;
            default : $this->listDoc();
        }
    }
    
    /**
     * Llama a la vista “doc_manager.php” y la llena con los datos de todos los 
     * documentos disponibles en la base de datos.
     */
    public function listDoc() {
        $capa = $this->_capa;
        $aux = $this->_doc->listRecords();
        $files = Array();
        foreach ($aux as $auxiliar) {
            if (pany($auxiliar['rol_show'])||($_SESSION['id']==$auxiliar['usercrea']))
                $files[] = $auxiliar;
        }
        $new = 'controladores/control_doc.class.php?action=new';
        $show = 'controladores/control_doc.class.php?action=show';
        $edit = 'controladores/control_doc.class.php?action=edit';
        $delete = 'controladores/control_doc.class.php?action=delete';
        $download = 'controladores/control_doc.class.php?action=download';
        $asign = 'controladores/control_asign.class.php?action=list';
        $check = 'controladores/control_doc.class.php?action=check';
        include (realpath(dirname(__FILE__)) . '/../vistas/doc_manager.php');
    }
    
    /**
     * Llama a la vista “show_doc.php” cogiendo por GET el parámetro “id” como la id 
     * del documento a visualizar en la vista.
     * @param Int $_GET['id'] id documento
     */
    public function showDoc() {
        $capa = $this->_capa;
        if (isset($_GET["id"]) && $_GET["id"] != "") {
            $fila = $this->_doc->getRecord($_GET["id"]);
            $script = 'controladores/control_doc.class.php?action=list';
            include (realpath(dirname(__FILE__)) . '/../vistas/show_doc.php');
        }
    }
    
    /**
     * Llama a la vista “doc_editor.php” cogiendo por GET el parámetro “id” como la 
     * id del documento que queremos editar en el editor.
     * @param Int $_GET['id'] id documento
     */
    public function editDoc() {
        $capa = $this->_capa;
        if (isset($_GET["id"]) && $_GET["id"] != "") {
            $fila = $this->_doc->getRecord($_GET["id"]);
            if (pany($fila['rol_edit'])||($_SESSION['id']==$auxiliar['usercrea'])) {
                $action = $this->_action;
                $script = 'controladores/control_doc.class.php?action=update&id=' . $_GET["id"];
                $roles = $this->_rols->listRecords();
                include (realpath(dirname(__FILE__)) . '/../vistas/doc_editor.php');
            }
        }
    }
    
    /**
     * Llama a la vista “doc_input.php” desde la cual podemos seleccionar del disco 
     * duro de la máquina cliente el fichero que queremos subir al aplicativo.
     */
    public function newDoc() {
        $capa = $this->_capa;
        $fila = $this->_doc->listRecords();
        $action = $this->_action;
        $script = 'controladores/control_doc.class.php?&action=insert';
        $roles = $this->_rols->listRecords();
        include (realpath(dirname(__FILE__)) . '/../vistas/doc_input.php');
    }
    
    /**
     * Junto a la acción update, hay que pasarle por GET el id del documento a 
     * actualizar, como parámetro “id”. El controlador envía los datos recogidos por 
     * POST al modelo de datos encargado de introducir los cambios en el registro 
     * correspondiente de la base de datos.
     * @param Int $_GET['id'] id documento
     */
    public function updateDoc() {
        if (isset($_GET["id"]))
            $_POST["id"] = $_GET["id"];
        $this->_doc->updateRecord($_POST);
        $this->listDoc();
    }
    
    /**
     * Se encarga de ordenar al modelo de datos correspondiente, el documento 
     * con el id especificado.
     * El id se le pasa por GET con el identificador “id”. Adicionalmente, borra 
     * del servidor, el archivo asociado al registro borrado.
     * @param Int $_GET['id'] id documento
     */
    public function deleteDoc() {
        $_asign = new Asign();
        $where = "id_document='" . $_GET["id"] . "'";
        $eliminar = $_asign->listRecords($where);
        if (pany($eliminar['rol_edit'])||($_SESSION['id']==$auxiliar['usercrea'])) {
            foreach ($eliminar as $elim) {
                $_asign->deleteRecord($elim["id"]);
            }
            if (isset($_GET["id"]))
                $this->_doc->deleteDoc($_GET["id"]);
        }
        $this->listDoc();
    }
    
    /**
     * Recoge por POST los datos del nuevo documento y los manda al modelo de datos 
     * para que los inserte en la base de datos. También se ocupa de indicarle al 
     * modelo de datos, el archivo que se ha de copiar en la carpeta “/doc” del 
     * aplicativo renombrado como su hash.
     */
    public function insertDoc() {
        $data = $_FILES['adjunt_0'];
        //print_r($_GET);
        $datos['titol'] = $_POST['titol'];
        $datos['rol_show'] = $_POST['rol_show'];
        $datos['rol_edit'] = $_POST['rol_edit'];
        $this->_doc->insertDoc($data, $datos);
        //$this->listDoc();
    }
    
    /**
     * Se le ha de pasar por GET el parámetro “id” que será el id del fichero que 
     * queremos descargar. Este da la orden al modelo de datos y este abre el 
     * dialogo de descarga.
     */
    public function downloadDoc() {
        $this->_doc->getFile($this->_doc->getRecord($_GET["id"]));
    }

    /**
     * Cambia el estado “aprobado” de un documento en la base de datos. 
     * Si está aprobado lo deja sin aprobar y si no lo está, lo aprueba. 
     * Se le ha de pasar por GET el parámetro “id” del documento a modificar.
     * @param Int $_GET['id'] id documento
     */
    public function check() {
        $value = $this->_doc->getRecord($_GET["id"]);
        if ($_GET["value"] == 0) {
            $value["aprovat"] = 1;
        } else if ($_GET["value"] == 1)
            $value["aprovat"] = 0;
        $this->_doc->updateRecord($value);
        $this->listDoc();
    }

}
?>

